package com.dkd.manage.controller;

import java.util.List;
import javax.servlet.http.HttpServletResponse;

import com.dkd.manage.domain.vo.NodeVo;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dkd.common.annotation.Log;
import com.dkd.common.core.controller.BaseController;
import com.dkd.common.core.domain.AjaxResult;
import com.dkd.common.enums.BusinessType;
import com.dkd.manage.domain.Node;
import com.dkd.manage.service.INodeService;
import com.dkd.common.utils.poi.ExcelUtil;
import com.dkd.common.core.page.TableDataInfo;

/**
 * 点位管理Controller
 * 
 * @author 赵昊鹏
 * @date 2024-10-09
 */
@RestController//该类是一个控制器，并且所有方法的返回值会自动序列化为 JSON 格式。
@RequestMapping("/manage/node")//该控制器的基础 URL 路径。所有在该控制器中定义的请求映射都将以 /manage/node 开头。
public class NodeController extends BaseController
{
    @Autowired//Spring 的依赖注入注解，用于自动注入 INodeService 接口的实现类。
    private INodeService nodeService;

    /**
     * 查询点位管理列表
     */
    @PreAuthorize("@ss.hasPermi('manage:node:list')")//@PreAuthorize: Spring Security 的注解，用于方法级别的权限控制。这里检查当前用户是否有 manage:node:list 权限。
    @GetMapping("/list")//映射 HTTP GET 请求到 /manage/node/list 路径，表示该方法用于查询点位管理列表。
    public TableDataInfo list(Node node)
    {
        startPage();
        List<NodeVo> voList = nodeService.selectNodeVoList(node);
        return getDataTable(voList);
    }

    /**
     * 导出点位管理列表
     */
    @PreAuthorize("@ss.hasPermi('manage:node:export')")
    @Log(title = "点位管理", businessType = BusinessType.EXPORT)//@Log: 自定义注解，通常用于记录操作日志。这里记录了导出点位管理的操作。
    @PostMapping("/export")//映射 HTTP POST 请求到 /manage/node/export 路径，表示该方法用于导出点位管理列表。
    public void export(HttpServletResponse response, Node node)
    {
        List<Node> list = nodeService.selectNodeList(node);
        ExcelUtil<Node> util = new ExcelUtil<Node>(Node.class);
        util.exportExcel(response, list, "点位管理数据");
    }

    /**
     * 获取点位管理详细信息
     */
    @PreAuthorize("@ss.hasPermi('manage:node:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)//@PathVariable("id"): 从 URL 路径中提取 id 参数，表示要查询的点位 ID。
    {
        return success(nodeService.selectNodeById(id));
    }

    /**
     * 新增点位管理
     */
    @PreAuthorize("@ss.hasPermi('manage:node:add')")
    @Log(title = "点位管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody Node node)
    {
        return toAjax(nodeService.insertNode(node));
    }//@RequestBody: 将请求体中的 JSON 数据自动转换为 Node 对象。

    /**
     * 修改点位管理
     */
    @PreAuthorize("@ss.hasPermi('manage:node:edit')")
    @Log(title = "点位管理", businessType = BusinessType.UPDATE)
    @PutMapping//@PutMapping: 映射 HTTP PUT 请求到 /manage/node 路径，表示该方法用于修改点位管理。
    public AjaxResult edit(@RequestBody Node node)
    {
        return toAjax(nodeService.updateNode(node));
    }

    /**
     * 删除点位管理
     */
    @PreAuthorize("@ss.hasPermi('manage:node:remove')")
    @Log(title = "点位管理", businessType = BusinessType.DELETE)
	@DeleteMapping("/{ids}")//@DeleteMapping("/{ids}"): 映射 HTTP DELETE 请求到 /manage/node/{ids} 路径，表示该方法用于删除指定 ID 的点位管理。ids 是一个数组，表示要删除的多个点位 ID。
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(nodeService.deleteNodeByIds(ids));
    }
}
